package cn.tedu.tickets;
/**需求:设计多线程编程模型，4个窗口共计售票100张
 * 本方案使用多线程编程实现方式1:extends Thread来完成*/
public class TestThread {
    public static void main(String[] args) {
        //5.创建自定义类对象,并以多线程的方式启动
        TicketThread t1 = new TicketThread();
        TicketThread t2 = new TicketThread();
        TicketThread t3 = new TicketThread();
        TicketThread t4 = new TicketThread();
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}
//1.自定义多线程售票类
class TicketThread extends Thread{
    //3.定义变量,用来保存要售卖的票数
    /*问题:4个线程对象共计售票400张,原因是创建了4次自定义类对象
     * 每个对象都独立持有自己的成员变量,互不影响
     * 解决:想让多个对象共享同一份数据,票数需要设置为静态的*/
    static int tickets = 100;
    //2.重写run(),完成业务
    @Override
    public void run() {
        //4.1循环卖票
        while(true){
            synchronized (TicketThread.class){
                if(tickets>0){
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //4.2打印当前正在卖票的线程名称,并且票数-1
                    System.out.println(getName()+"="+tickets--);
                }
                //4.3做判断,如果没有票了,就停止循环卖票
                if(tickets <= 0) break;//注意:死循环必须设置出口!
            }
        }
    }
}